home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 031a / adg_4_6.zip / SPINDLG.C < prev   
C/C++ Source or Header  |  1991-02-21  |  4KB  |  125 lines

  1. /****************************************************************************
  2. Module name: SpinDlg.C
  3. Programmer : Jeffrey M. Richter.
  4. *****************************************************************************/
  5.  
  6. #include "..\nowindws.h"
  7. #define  OEMRESOURCE
  8. #undef   NOCOLOR
  9. #undef   NOCTLMGR
  10. #undef   NOGDI
  11. #undef   NOKERNEL
  12. #undef   NOLSTRING
  13. #undef   NOMEMMGR
  14. #undef   NORASTEROPS
  15. #undef   NOUSER
  16. #undef   NOVIRTUALKEYCODES
  17. #undef   NOWINMESSAGES
  18. #undef   NOWINOFFSETS
  19. #undef   NOWINSTYLES
  20. #include <windows.h>
  21. #include <custcntl.h>
  22.  
  23. #include "cntl-de.h"
  24.  
  25. #include "spin.h"
  26. #include "dialog.h"
  27.  
  28. extern HANDLE _hInstance;
  29. extern char _szControlName[];
  30.  
  31. BOOL FAR PASCAL SpinDlgFn (HWND hDlg, WORD wMessage, WORD wParam, LONG lParam);
  32.  
  33.  
  34. GLOBALHANDLE FAR PASCAL SpinInfo (void) {
  35.    GLOBALHANDLE hCtlInfo = NULL;
  36.  
  37.    hCtlInfo = ControlInfo(0x0100, _szControlName, _szControlName);
  38.    if (hCtlInfo == NULL) return(hCtlInfo);
  39.    AddControlType(hCtlInfo, 0, 7, 12, WS_BORDER | WS_CHILD, _szControlName);
  40.    return(hCtlInfo);
  41. }
  42.  
  43.  
  44. BOOL FAR PASCAL SpinStyle (HWND hWnd, GLOBALHANDLE hCtlStyle,
  45.                         LPFNSTRTOID lpfnStrToId, LPFNIDTOSTR lpfnIdToStr) {
  46.    return(ShowStyleDlg(_hInstance, "StyleDlg", hWnd, (FARPROC) SpinDlgFn, 0,
  47.       hCtlStyle, lpfnStrToId, lpfnIdToStr));
  48. }
  49.  
  50.  
  51. BOOL FAR PASCAL SpinDlgFn (HWND hDlg, WORD wMsg, WORD wParam, LONG lParam) {
  52.    BOOL fProcessed = TRUE;
  53.    char szId[20];
  54.    DWORD dwResult;
  55.    LPCTLSTYLE lpCtlStyle;
  56.  
  57.    switch (wMsg) {
  58.       case WM_INITDIALOG:
  59.          // Fill the "EDIT" control with the name of the this control's ID.
  60.          GetIdString(hDlg, szId, sizeof(szId));
  61.          SetDlgItemText(hDlg, ID_VALUE, szId);
  62.  
  63.          // Initialize check box reflecting Spin control's styles.
  64.          lpCtlStyle = CtlStyleLock(hDlg);
  65.          SendDlgItemMessage(hDlg, ID_WRAP, BM_SETCHECK,
  66.             (BOOL) (lpCtlStyle->dwStyle & SPNS_WRAP), 0l);
  67.          CtlStyleUnlock(hDlg);
  68.          break;
  69.  
  70.       case WM_COMMAND:
  71.          switch(wParam) {
  72.             case IDOK:
  73.  
  74.                // Convert the string ID value to its numeric equivalent.
  75.                GetDlgItemText(hDlg, ID_VALUE, szId, sizeof(szId));
  76.                dwResult = SetIdValue(hDlg, szId);
  77.  
  78.                // If string ID not found or added, do NOT end Dialog box.
  79.                if (LOWORD(dwResult) == 0) break;
  80.  
  81.                // Calculate the new control's styles.
  82.                lpCtlStyle = CtlStyleLock(hDlg);
  83.  
  84.                // Clear control-specific flags
  85.                lpCtlStyle->dwStyle &= 0xffff0000L;
  86.  
  87.                if (SendDlgItemMessage(hDlg, ID_WRAP, BM_GETCHECK, 0, 0l))
  88.                   lpCtlStyle->dwStyle |= SPNS_WRAP;
  89.  
  90.                CtlStyleUnlock(hDlg);
  91.  
  92.                // Fall through to IDCANCEL case.
  93.  
  94.             case IDCANCEL:
  95.                // Terminate dialog box returning IDOK or IDCANCEL.
  96.                EndDialog(hDlg, wParam);
  97.                break;
  98.  
  99.             case ID_VALUE:
  100.                // Disable IDOK button if no text exists in ID_VALUE box.
  101.                if (HIWORD(lParam) == EN_CHANGE)
  102.                   EnableWindow(GetDlgItem(hDlg, IDOK),
  103.                      SendMessage(LOWORD(lParam), WM_GETTEXTLENGTH, 0, 0L)
  104.                      ? TRUE : FALSE);
  105.                break;
  106.  
  107.             default: fProcessed = FALSE; break;
  108.          }
  109.          break;
  110.  
  111.       default: fProcessed = FALSE; break;
  112.    }
  113.    return(fProcessed);
  114. }
  115.  
  116.  
  117. WORD FAR PASCAL SpinFlags (DWORD dwFlags, LPSTR szString, WORD wMaxString) {
  118.    WORD x;
  119.    *szString = 0;
  120.    if (dwFlags & SPNS_WRAP) lstrcat(szString, "SPNS_WRAP | ");
  121.    x = lstrlen(szString);
  122.    if (x > 0) { x -= sizeof(" | ") - 1; *(szString + x) = 0; }
  123.    return(x);
  124. }
  125.